# -*- coding: utf-8 -*-
"""
作者: liuzaiqiang
邮箱: zaiqiangliu@163.com
地址: 新疆大学
创建时间: 2025/11/17 18:54
功能描述: 
"""
"""
题目背景：

    研究生经常需要处理和备份大量的实验数据。假设你的云存储空间有限，你希望优先备份那些最重要且单位大小价值最高的数据文件，以在有限的空间内最大化备份数据的总价值。

题目描述：

    你有一系列数据文件，每个文件都有一个“大小(weight)”和一个“重要性评分(value)”。你的任务是设计一个 DataBackup 系统，
    该系统能够选择要备份的文件（或文件的一部分），以在不超过云盘总容量的前提下，最大化备份的总价值。

需要：

    1.创建一个 DataFile 类来表示数据文件，包含 name, size, value 属性。
    2.创建一个 DataBackup 类，包含 capacity 属性和一个 perform_backup 方法。
    3.perform_backup 方法接收一个文件列表，并根据贪心策略（优先选择“价值密度”最高的文件）来决定备份方案，并返回最大总价值。

测试用例：

输入	输出
50	240.00
0	0.00
100	325.00


"""
class DataFile:
    def __init__(self, name, size, value):
        self.name = name
        self.size = size
        self.value = value
        self.value_density = value / size

class DataBackup:
    def __init__(self, capacity):
        self.capacity = capacity

    def perform_backup(self, files):
        files.sort(key=lambda x: x.value_density, reverse=True)
        total_value = 0
        total_size = 0

        for file in files:
            if total_size + file.size <= self.capacity:
                total_size += file.size
                total_value += file.value
            else: #这里没有完全符合题意 最后一个文件如果不能完全同步，也支持同步一部分的 请修改
                total_value += (self.capacity - total_size) * file.value_density
        return total_value

# 测试用例
if  __name__ == "__main__":

    files = [DataFile("file1", 10, 150),
             DataFile("file2", 20, 200),
             DataFile("file3", 30, 30)]

    backup = DataBackup(50)
    print(backup.perform_backup(files))  # 输出 370.0

    backup = DataBackup(0)
    print(backup.perform_backup(files))  # 输出 0.00

    backup = DataBackup(100)
    print(backup.perform_backup(files))  # 输出 380


